/**********************************************************************************************/
// dgt_Plugin.h
//
// 
// Copyright Diamant Group 2007
/**********************************************************************************************/
#ifndef _DGT_PLUGIN_H_
#define _DGT_PLUGIN_H_

#include "dgtKernel.h"
#include "dgt_SmartMacros.h"
#include "dgt_Algorithm.h"
#include "dgt_Element.h"
#include "dgt_Circuit.h"


/**********************************************************************************************/
struct dgt_PluginInfo
{
	wxString	m_PluginName;	// Name of Plugin
	wxString	m_Version;		// Version
	wxString	m_Description;	// Description
	PLUGIN_TYPE	m_PluginType;	// PluginType
};

SMART_CLASS( dgt_Plugin );

/**********************************************************************************************/
// Main plugin interface
//
interface dgt_Plugin
{
	public://///////////////////////////////////////////////////////////////////////////////////
							dgt_Plugin( void ) {};
	
virtual						~dgt_Plugin( void ) {};

	public://///////////////////////////////////////////////////////////////////////////////////

virtual void					SaveAlgorithm( dgt_Algorithm_Ptr inAlgorithm, wxString inName ) {};
virtual	dgt_Algorithm_Ptr		LoadAlgorithm( wxString inName ) { return static_cast<dgt_Algorithm_Ptr> (NULL); };

virtual	dgt_Element_Ptr			get_Element( int inNum ) { return static_cast<dgt_Element_Ptr>(NULL); }; 

virtual	unsigned long			get_ElementCount( void ) { return 0; };

virtual	void					GetPluginInfo( dgt_PluginInfo& t_Info ) = 0;

virtual	dgt_Circuit_Ptr			Synthesize( dgt_Algorithm_Ptr inAlgorithm, dgt_Element_Ptr inTrigger ) { return static_cast<dgt_Circuit_Ptr> (NULL); };

};

/**********************************************************************************************/
typedef	dgt_Plugin* (*GETINSTANCEFUNC) ( void );

#endif // _DGT_PLUGIN_H_
